package gob.inei.enaho.view.widgets;

import java.sql.SQLException;

import gob.inei.enaho.context.AppContext;
import gob.inei.enaho.model.domain.ubicacion.Departamento;
import gob.inei.enaho.model.domain.ubicacion.Distrito;
import gob.inei.enaho.model.domain.ubicacion.Provincia;
import gob.inei.enaho.model.service.DepartamentoService;
import gob.inei.enaho.model.service.DistritoService;
import gob.inei.enaho.model.service.ProvinciaService;
import gob.inei.enaho2014.R;
import android.content.Context;
import android.util.AttributeSet;
import util.android.AndroidUtil;
import util.android.adapters.ItemSpinnerAdapter;
import util.android.widgets.deprecated.StringSpinner3View;
import util.form.respuesta.listener.OnCambioValor1Listener;

public class UbigeoView 
extends StringSpinner3View
{
	private DepartamentoService departamentoService = AppContext.getServices().getDepartamentoService();
	private ProvinciaService provinciaService = AppContext.getServices().getProvinciaService();
	private DistritoService distritoService = AppContext.getServices().getDistritoService();
	//private boolean

	public UbigeoView(final Context context, AttributeSet attrs) {
		super(context, attrs);
		this.getEtiqueta1().setText(this.getResources().getString(R.string.departamento));
		this.getEtiqueta2().setText(this.getResources().getString(R.string.provincia));
		this.getEtiqueta3().setText(this.getResources().getString(R.string.distrito));
		
		try {
			this.getSpinner1().getView().setAdapter(new ItemSpinnerAdapter<Departamento>(context,departamentoService.findAll()) {
				@Override
				public String getKey(Departamento obj) {
					return obj.getCodigo();
				}

				@Override
				public String getLabel(Departamento obj) {
					return obj.getCodigo()+" "+obj.getNombre();
				}
			});
		} catch (SQLException e) {
			AndroidUtil.mostrarExcepcionEnToast(context, e);
		}
		
		this.getSpinner1().setOnCambioValorListener(new OnCambioValor1Listener() {
			@Override
			public void onCambioValor(String valor) throws Exception {
				try {
					getSpinner2().getView().setAdapter(new ItemSpinnerAdapter<Provincia>(context,provinciaService.findByDepartamento(valor)) {
						@Override
						public String getKey(Provincia obj) {
							return obj.getCodigo();
						}

						@Override
						public String getLabel(Provincia obj) {
							return obj.getCodigo()+" "+obj.getNombre();
						}
					});
				} catch (SQLException e) {
					getInput().manejarExcepcion(e);
				}
			}
		});
		
		this.getSpinner2().setOnCambioValorListener(new OnCambioValor1Listener() {
			
			@Override
			public void onCambioValor(String valor) throws Exception {
				String dep = getSpinner1().getValor();
				String prov = valor;
				
				try {
					getSpinner3().getView().setAdapter(new ItemSpinnerAdapter<Distrito>(context,distritoService.findByProvincia(dep,prov)) {
						@Override
						public String getKey(Distrito obj) {
							return obj.getCodigo();
						}

						@Override
						public String getLabel(Distrito obj) {
							return obj.getCodigo()+" "+obj.getNombre();
						}
					});
				} catch (SQLException e) {
					getInput().manejarExcepcion(e);
				}	
			}
		});
			
		this.getInput().setOnCambioValorListener(new OnCambioValor1Listener() {
			
			@Override
			public void onCambioValor(String v) throws Exception {
				if(v!=null && v.length()==6) {
					String dep = v.substring(0,2);
					String prov = v.substring(2,4);
					String dist = v.substring(4,6);
					
					getSpinner1().setValor(dep);
					getSpinner2().setValor(prov);
					getSpinner3().setValor(dist);
				}
			}
		});
	}

	
	
}
